Dictionary (字典)
Dictionary像是一個儲存的容器,沒有順序性,每個元素由一個key和value組成,value可以是另一個dictionary、list、字串、數字等等。字典在python裡記憶體的使用被設計成像hash table那樣 (hash table、hash function 之後的章節會更詳細介紹,這裡先帶大家使用dictionary,先記得key-value pair的特性就好)。
創建dictionary,時間複雜度: O(N), 空間複雜度: O(N)
dic1=dict(house1='Mary',house2='Jack',house3='Harry')
dic1
>> {'house1': 'Mary', 'house2': 'Jack', 'house3': 'Harry'}
dic2={'house1':'Mary','house2':'Jack','house3':'Harry'}
dic2
>> {'house1': 'Mary', 'house2': 'Jack', 'house3': 'Harry'}
更新(update)/增加(add)元素進dictionary,時間複雜度: O(1), 空間複雜度: O(1)
myDict={'name':'Edy','age':26}
myDict['age']=27
myDict
>> {'name':'Edy','age':27}
#add data
myDict['sex']='male'
myDict
>> {'name':'Edy','age':27,'sex':'male'}
# add dictionary to dictionary
myDict.update({'school':'Charite'})
myDict
>> {'name':'Edy','age':27,'sex':'male','school':'Charite'}
# 再一個例子
mydict2={'hobby':'coding','job':'Student','major':'biochemistry'}
myDict.update(mydict2)
myDict
>> {'name': 'Edy','age': 27,'sex': 'male','school': 'Charite','hobby': 'coding',
'job': 'Student','major': 'biochemistry'}
走訪dictionary,時間複雜度:O(N),空間複雜度:O(1)。
for key in myDict:
print(f'{key} : {myDict[key]}')
或者也可寫成
for key in myDict.keys():
print(f'{key} : {myDict[key]}')
或者也可寫成
for key,value in myDict.items():
print(f'{key} : {value}')
取得key中的值,時間複雜度:O(1),空間複雜度:O(1)。如果想找的key不在dictionary裡,會有error,所以很多時候會選用下一個要介紹的get而不是它
myDict['name']
>>'Edy'
取得key中的值,否則return default=None,時間複雜度:O(1),空間複雜度:O(1)。
#這個蠻常用的
myDict.get('name')
>>'Edy'
在字典內搜尋元素(value),時間複雜度: O(N),空間複雜度: O(1)
def searchDict(myDict,value):
for key in myDict:
if myDict[key]==value:
return key, value
return 'The value does not exist'
searchDict(myDict,27)
>>('age', 27)
從Dictionary刪除元素: 時間複雜度: O(1),空間複雜度: O(1)
del myDict['age']
或者是
myDict.pop('age')
刪除整個dictionary: 時間複雜度: O(N),空間複雜度: O(1)
myDict.clear()
在字典內創多個keys有相同的值
myDict={}.fromkeys(['A','B','C'],None)
myDict
>>{'A': None, 'B': None, 'C': None}
Tuple
Tuple一開始給人的感覺跟list很像,但它是immutable(不可變的),tuple內的值無法隨意更改,也不能隨意增加或刪除元素,也就是說list的方法像是:append()、insert()、remove()、pop()、clear()、sort()、reverse()皆不能在tuple上用;在tuple創建時,它在記憶體裡的位子就固定了(直接佔一個block),因此它比list有效率(快),以下直接來看程式碼比較容易理解。
創建一個tuple,時間複雜度: O(1),空間複雜度: O(N)
newTuple='a','b','c','d','e'
newTuple
>> ('a', 'b', 'c', 'd', 'e')
也可以寫作
newTuple1=tuple('abcde')
newTuple1
>> ('a', 'b', 'c', 'd', 'e')
從下面的例子可以看到,tuple沒辦法像list一樣隨意更改值
newTuple[0]='f'
>> TypeError: 'tuple' object does not support item assignment
根據idex取得tuple內的資料,時間複雜度:O(1),空間複雜度:O(1)
newTuple[0]
>>'a'
因為之後不管是linked list或是tree都需要使用class,下一篇我們會簡單介紹OOP(物件導向程式設計)。
參考資料:
The Complete Data Structures and Algorithms Course in Python (from Udemy)